准确的说,是“最后一个可视的主窗口被关闭时,UI线程将结束”。今天在调试一个程序的时候,程序会弹出一个 QFileDialog 供用户选择文件,但是发现当这个 Dialog 执行返回之后,整个程序都退出了,查阅了资料后发现,是 Qt 特意设置的。
先来看这个神奇的代码
这是主窗口的代码,点击一个Button之后,会弹出一个对话框,并且主窗口会隐藏掉,可是当这个对话框完成返回之后,主程序也退出了,从日志可以看到 ~MainWindow() 被执行。通常情况下,这个效果都不是Coder想要的,后来查阅文档找到了相关说明,当所有“可见”的“主”窗口关闭之后,UI线程就会结束,所谓主窗口,是指parent为空的窗口,有了这个解释,就容易理解这个行为了。
为了防止主程序退出,可以设置不要在所有窗口关闭后退出: